// src/main/java/com/mcp_life/mcp_life/module/userbasemoudles/controller/AuthController.java
package com.mcp_life.module.userbasemodules.controller;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mcp_life.common.result.Result;
import com.mcp_life.entity.dto.ApplyStoreDTO;
import com.mcp_life.entity.dto.UserRegDTO;
import com.mcp_life.common.jwt.AuthResponse;

import com.mcp_life.common.jwt.JwtUtil;
import com.mcp_life.entity.dto.UserLoginDTO;
import com.mcp_life.entity.dto.UserRealNameDTO;
import com.mcp_life.module.userbasemodules.service.UserService;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/auth")
@CrossOrigin
public class AuthController {

    @Autowired
    private UserService userService;

    @Autowired
    private JwtUtil jwtUtil;

    /**
     * 用户登录接口
     */
    @PostMapping("/login")
    public Result login(@Valid @RequestBody UserLoginDTO loginDTO) {
        log.info("收到登录请求，账号: {}", loginDTO.getAccount());
        String account = loginDTO.getAccount();
        String password = loginDTO.getPassword();

        // 验证用户凭据
        if (userService.authenticate(account, password)) {
            // 生成JWT token
            String token = jwtUtil.generateToken(account);
            log.info("生成JWT token成功，账号: {}", account);
            log.info("用户登录成功，账号: {}", account);
            return Result.success(new AuthResponse(token));
        } else {
            log.warn("用户登录失败，账号: {}", account);
            return Result.error("认证失败!");
        }
    }

    /**
     * 用户注册接口
     */
    @PostMapping("/register")
    public Result register(@Valid @RequestBody UserRegDTO registerDTO) {
        log.info("收到注册请求，账号: {}", registerDTO.getAccount());
        userService.register(registerDTO);
        log.info("用户注册成功，账号: {}", registerDTO.getAccount());
        return Result.success();
    }

    /**
     * 用户实名注册接口
     */
    @PostMapping("/realNameRegister")
    public Result realNameRegister(@Valid @RequestBody UserRealNameDTO registerDTO) throws JsonProcessingException {
        log.info("收到实名注册请求，账号: {}", registerDTO.getName());
        //用户在注册完成之后，可以选择立刻填写实名信息，从页面中获取用户id
        String userId = registerDTO.getUserId();
        String name = registerDTO.getName();
        String idCard = registerDTO.getId_number();
        userService.realNameRegister(userId, idCard, name);
        log.info("用户实名注册成功，账号: {}", registerDTO.getName());
        return Result.success();
        //用户在登录系统之后可以在页面中选择实名（从UserContext中获取userid）
    }

    /**
     * 申请成为商家
     * 获取请求体，applyStoreDTO
     * applyStoreDTO中应该有三个不同类型的商家的实体类，以及一个type标志
     * 不同的type标志，分别代表不同的商家
     * 不同的类型调用不同的service
     * 前端到时候可以分两步传数据，第一步确定商家类型，第二步传入商家数据
     */
    @PostMapping("/applyStore")
    public Result applyStore(@Valid @RequestBody ApplyStoreDTO applyStoreDTO) {
       // log.info("收到申请商家请求，用户id: {}", applyStoreDTO.getUserId());
        //根据不同的类型调用不同的service
        if (applyStoreDTO.getType() == 1) {
            //调用RestaurantStoreService
            userService.applyHomeServiceStore(applyStoreDTO);
        } else if (applyStoreDTO.getType() == 2) {
            //调用HomeServiceStoreService
            userService.applySuppermarketStore(applyStoreDTO);
        }else if (applyStoreDTO.getType() == 3) {
            //调用SupermarketStoreService
            userService.applyRestaurantStore(applyStoreDTO);
        }
       // log.info("用户申请商家成功，用户id: {}", applyStoreDTO.getUserId());
        return Result.success();
    }




}
